package com.qinghong.gulimall.order;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 本地事务失效问题:
 * 同一个对象内事务方法互调默认失效，原因 绕过了代理对象，事务使用对象来控制的的
 * 解决：使用代理对象里调用事务方法
 * 1、引入aop-starter帮我们引入了aspectj
 * 2、开启aspectj动态代理 即使没有接口页可以动态代理
 *   对外暴露代理对象
 *   3、用代理对象的类互调
 *           OrderServiceImpl orderService = (OrderServiceImpl) AopContext.currentProxy();
 *
 *  Seata控制分布式事务
 *  1、每一个微服务必须创建undo_log
 *  2、安装事务协调器
 *  3、spring-cloud-starter-alibaba-seata
 *  4、所有想要用到分布式事务的微服务使用seata DataSourceProxy代理自己的数据源
 *  5、导入conf文件
 *  6、启动此时分布式事务
 *  7、给分布式大事务的入口标注@GlobalTransactional
 *  8、每一个远程的小事务用@Transactional
 */
// 防止循环注入
//@EnableAspectJAutoProxy(exposeProxy = true)
@EnableFeignClients
@EnableRedisHttpSession
@EnableRabbit
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallOrderApplication.class,args);
    }
}
